home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 May: Tool Chest / Developer CD Series May 1996 (Tool Chest) (Apple Computer) (1996).iso / Sample Code / SCSI Samples 1.0 / SCSI Async Sample 06⁄15 ƒ / Src / DisplayTestResults.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-06-16  |  3.7 KB  |  128 lines  |  [TEXT/KAHL]

  1. /*                                DisplayTestResults.c                            */
  2. /*
  3.  * DisplayTestResults.c
  4.  * Copyright © 93 Apple Computer Inc. All Rights Reserved.
  5.  *
  6.  * Run the dialog until the user has had enough.
  7.  */
  8. #include "SCSIAsyncSample.h"
  9. #include "SCSIDefinitions.h"
  10. #include <math.h>
  11. #define ALWAYS        1
  12. #define NEVER        1
  13. #define INFO        (*infoPtr)
  14.  
  15. void
  16. DisplayOneResult(
  17.         register InfoPtr                infoPtr
  18.     );
  19.  
  20. void
  21. DisplayTestResults(void)
  22. {
  23.         InfoPtr                            currentInfoPtr;
  24.         
  25.         if (infoPtrQueue.qHead == NULL)
  26.             DisplayLogString(gLogListHandle, "\pNo devices to test");
  27.         for (currentInfoPtr = (InfoPtr) infoPtrQueue.qHead;
  28.                 currentInfoPtr != NULL;
  29.                 currentInfoPtr = (InfoPtr) currentInfoPtr->link) {
  30.             DisplayOneResult(currentInfoPtr);
  31.         }
  32. }
  33.  
  34. void
  35. DisplayOneResult(
  36.         register InfoPtr                infoPtr
  37.     )
  38. {
  39.         Str255                            work;
  40.         Str255                            temp;
  41.         register short                    i;
  42.         register RequestMemoryPtr        requestMemoryPtr;
  43.         UnsignedWide                    deltaTime;
  44.         double                            overallAverageTime;
  45.         double                            mean;
  46.         double                            sdNumerator;
  47.         double                            sdDenomenator;
  48.         double                            standardDeviation;
  49.         
  50.         DisplayDeviceInfo(infoPtr);
  51.         if (INFO.validDevice) {
  52.             work[0] = 0;
  53.             AppendPascalString(work, "\p Final status: ");
  54.             AppendSigned(work, INFO.finalStatus);
  55.             AppendPascalString(work, "\p. Transfers ");
  56.             AppendUnsigned(work, INFO.transfersAttempted);
  57.             AppendPascalString(work, "\p attempted, ");
  58.             AppendUnsigned(work, INFO.transfersCompleted);
  59.             AppendPascalString(work, "\p completed, ");
  60.             AppendUnsigned(work, INFO.asynchRequests);
  61.             AppendPascalString(work, "\p asynch");
  62.             DisplayLogString(gLogListHandle, work);
  63.             LogStatus(gLogListHandle, INFO.finalStatus, "\p Status error");
  64.             /*
  65.              * This is ugly but I have a plane to catch.
  66.              */
  67.             if (NEVER == FALSE) {
  68.                 for (i = 0; i < kRequestMemory; i++) {
  69.                     requestMemoryPtr = &INFO.requestMemory[i];
  70.                     if (ALWAYS || i < 10) {
  71.                         MicrosecondDelta(
  72.                             &requestMemoryPtr->startTime,
  73.                             &requestMemoryPtr->endTime,
  74.                             &deltaTime
  75.                         );
  76.                         work[0] = 0;
  77.                         AppendUnsignedInField(temp, i, 2);
  78.                         AppendPascalString(work, temp);
  79.                         AppendPascalString(work, "\p: ");
  80.                         AppendUnsignedInField(temp, requestMemoryPtr->blockNumber, 8);
  81.                         AppendPascalString(work, temp);
  82.                         AppendChar(work, ' ');
  83.                         AppendDouble(temp, MicrosecondToDouble(&deltaTime) / 1000000.0, 6);
  84.                         AppendPascalString(work, temp);
  85.                         DisplayLogString(gLogListHandle, work);
  86.                     }
  87.                 }
  88.             }
  89.             /*
  90.              * Convert from microseconds to seconds.
  91.              */
  92.             MicrosecondDelta(
  93.                 &INFO.testStartTime,
  94.                 &INFO.testEndTime,
  95.                 &deltaTime
  96.             );
  97.             if (INFO.transfersCompleted > 0) {
  98.                 mean = INFO.sampleSum / (double) INFO.transfersCompleted;
  99.                 if (INFO.transfersCompleted > 1) {
  100.                     sdNumerator = INFO.sampleSumSquare
  101.                         - (INFO.sampleSum * INFO.sampleSum) / (double) INFO.transfersCompleted;
  102.                     sdDenomenator = (double) INFO.transfersCompleted - 1;
  103.                     standardDeviation = sqrt(sdNumerator / sdDenomenator);
  104.                 }
  105.             }
  106.             if (INFO.transfersCompleted > 0) {
  107.                 overallAverageTime = MicrosecondToDouble(&deltaTime);
  108.                 overallAverageTime /= ((double) INFO.transfersCompleted);
  109.                 overallAverageTime /= 1000000.0;
  110.                 work[0] = 0;
  111.                 AppendPascalString(work, "\p Mean ");
  112.                 AppendDouble(work, mean, 6);
  113.                 if (INFO.transfersCompleted > 1) {
  114.                     AppendPascalString(work, "\p, Standard Deviation ");
  115.                     AppendDouble(work, standardDeviation, 6);
  116.                 }
  117.                 DisplayLogString(gLogListHandle, work);
  118.                 work[0] = 0;
  119.                 AppendPascalString(work, "\p Overall average ");
  120.                 AppendDouble(work, overallAverageTime, 6);
  121.                 AppendPascalString(work, "\p, Average overhead ");
  122.                 AppendDouble(work, overallAverageTime - mean, 6);
  123.                 DisplayLogString(gLogListHandle, work);
  124.             }
  125.         }
  126. }
  127.  
  128.